[Looker] Looker Blocks™のGoogle Analytics 360で複数プロパティに挑戦 #looker
Looker Blocks™のGoogle Analytics 360で複数のプロパティを使えるようにしようとしたところドロ沼にハマったので、調べて分かったことをまとめます。
Looker Blocks™のカスタマイズ
Looker Blocks™をインストールすると、read-onlyプロジェクトとwritableプロジェクトの2つのプロジェクトがインストールされます。この2つのプロジェクトは互いに依存関係にあり、何かしらユーザー側で手を加えたい場合にはwritableプロジェクトの方で書き換える必要があります。
これら2つのプロジェクトの存在や依存関係について知っていないと、カスタマイズする際にエラー地獄にハマってしまいます。(もうガッツリどハマりです・・・。)
今回は私がどハマりしたGoogle Analytics 360のLooker Blocks™で複数プロパティを設定する方法をご紹介します。
Google Analytics 360
インストール
Marketplaceからインポートすれば導入できます。
インストールする前に接続情報やスキーマ情報を記載すると、
2つのプロジェクトがインストールされます。
片方はread-onlyのためView LookML
と表示されています。また、メニューバーのDevelopのドロップダウンにはwritableのプロジェクトだけが表示されます。(最初はBlocksをインストールした際に2つのプロジェクトが作られることを知らなかったので、ものすごく混乱というか、、、混乱しました。)
また、インストール前に入力した接続情報などはread-onlyプロジェクトの方に記載されるため、GitHub上にread-onlyプロジェクトと、writableプロジェクトの両方が公開されていますが、gitからクローンする方法だとプロジェクトに必要な情報が書き込めなくなってしまいます。
複数プロパティに修正
インストール後のデフォルトの設定では1つのプロパティしか表示できないようになっているので、複数プロパティを表示できるようにga_sessions.view
を修正します。
コメントアウトしてあるsql_table_name(上画像21〜30行目)のコメントを外して、34行目のsql_table_nameをコメントアウトします。(command + /
でコメントアウトできます。)
21〜30行目は何をしているかというと、manifest fileに記載している@{SCHEMA_NAME}.@{GA360_TABLE_NAME}
を呼び出してUNION
しています。
ということは、manifestファイルに追加のスキーマ(プロパティ)を定義して、UNION
する箇所を書き換えればいいことになります。
例えば、最初に登録していたのがAndroidのプロパティで、iOSのプロパティを追加したい場合、manifestファイルにiOSのスキーマ情報を追記して、ga_sessions.viewファイルのsql_table_nameのUNION
する @{SCHEMA_NAME}
をmanifestファイルに記載したものに変更します。
# manifest.lkml ##### 追記 ##### constant: SCHEMA_NAME_iOS { value: "bigquery-public-data.iOS" }
# ga_sessions.view.lkml sql_table_name: ( SELECT *, 'Property1' as property FROM `@{SCHEMA_NAME}.@{GA360_TABLE_NAME}` WHERE *****) UNION ALL SELECT *, 'Property2' as property FROM `@{SCHEMA_NAME_iOS}.@{GA360_TABLE_NAME}` WHERE *****) );; dimension: property { hidden: yes suggestions: ["Android","iOS"] sql: CASE WHEN ${TABLE}.property = "Property1" THEN "Android" WHEN ${TABLE}.property = "Property2" THEN "iOS" ELSE NULL END ;; }
さらに、property dimensionのsuggestions
とsql
の"Website1","Website2"
を"Android","iOS"
にすれば完了です。
シンプルですね。
・・・とはならなかったんです。ここまでくるのに時間をジャブジャブ使ってしまいました。
どこで、何に躓いたのか?
read-onlyプロジェクトの存在を知らなかった
最初に混乱したのは、ga_sessions_config view
がextendしているga_sessions_core view
がプロジェクト内に存在しないことでした。(下画像4〜6行目)ga_sessions_core view
は、read-onlyプロジェクトの方に存在していたのですが、最初は2つプロジェクトが作成されていることを知らなかったので、このプロジェクトはどうやって動いているのだろうかと不思議に思いました。
(さらにwritableプロジェクトの方のmodelファイルには、extension: required
と書かれたexploreしかなく、connectionパラメータも書かれていなかったので、さらに混乱してしまいました。)
manifestファイルのSCHEMA_NAME定数を書き換えてしまっていた
writableプロジェクトのmanifestファイルには予め2つの定数が定義されていました。
この定義を見て、SCHEMA_NAMEconstant
のvalueを元のスキーマ情報に書き換えて、同じように追加したいgaプロパティのスキーマ情報をconstant
で定義すればいいと思い、以下のように定義してしまいました。
このmanifestファイルに合わせてga_sessions.vewを書き換えて完成! と思ってExploreを開いたら...
エラーです。しかも3つも文句を言われています。
上の2つは同じようなことを言われていて、依存関係にあるmarketplace_new_google_analytics_360_config
に定数をprovideせよというもの。ここで自分が触っていたプロジェクトと違う名前のプロジェクトが登場して、「むむむ」となりread-onlyプロジェクトの発見につながりました。
そしてこのエラーの原因は定数の定義にexport: orverride_required
をつけてしまっていたことでした。
追加のスキーマ情報は、依存関係にあるプロジェクト(read-only)には定義されていないので、オーバーライドを要求されても優先させるものがないですよというエラーが出てしまうというわけです。
また、一番下のエラーは逆にread-onlyでexport: orverride_required
となっている定数SCHEMA_NAME
がwritableプロジェクトの方にオーバーライドさせるものがないというエラーです。
ようやくread-onlyプロジェクトの存在に気づいた私は、両者の複雑に入り組んだ依存関係を解明し、writableプロジェクトのmanifestファイルに元々定義されていた2つの定数を修正してはいけないのだと知りました。
また、追加のプロパティのスキーマ情報の定数にはexport
サブパラメーターが不要だったことも気付きました。(コピペが大好きなもので、ドツボにはまりました。)
まとめ
今回は大変な思いをしたLooker Blocks™ですが、便利なのでまた別のBlocksを試してみようと思っています。